#include <stdio.h>
#include "loach_logger.hpp"

void test_func(){
    for(int i=0;i<48520;++i){
        for(int j=0;j<4852;++j){
            float a = 1.3422345;
            float b = 3.333349378475;
            float c = a*b;
            float d = a/b;
        }
    }
}

/***********************************************************
 * @description: 获取函数运行时间 demo
 * @note:: 
 *  1. 使用 LoachLogger 在命令行打印函数运行时间
 *  2. 使用 LoachLogger 在 ".log"文件中输出函数运行时间
 *  3. 获取函数运行时间(返回一个float)（与LoachLogger 解耦）
 *  4. 本demo中示例均对 test_func 进行计时
************************************************************/
void DemoGetFuncRunTime(){

    ///! CASE-1:使用 LoachLogger 在命令行与"*.log"文件中打印函数运行时间
    LoachLogger *logger = LoachLogger::GetLogger();
    LoggerTimer(logger,test_func());    // 计时并打印

    ///! CASE-2:获取函数运行时间(返回一个float)（与LoachLogger 解耦）
    float func_run_t = __FUNC_TIMER__(test_func());     // 获取函数运行时间，这是一个有返回值的宏定义
    std::cout<<"get test_func's run time: "<<func_run_t<<std::endl;
}

/***********************************************************
 * @description: 打印 log 信息到终端与.log文件 demo
 * @note:: 
 *  1. 使用 LoachLogger 在命令行打印函数运行时间
 *  2. 使用 LoachLogger 在 ".log"文件中输出函数运行时间
 *  3. 获取函数运行时间(返回一个float)（与LoachLogger 解耦）
 *  4. 本demo中示例均对 test_func 进行计时
************************************************************/
void DemoPrintLogMessage(){
    // CASE-1 :: 只输出log信息到终端,使用空初始化
    LoachLogger *logger1 = LoachLogger::GetLogger();
    logger1->Debug("Log1 Debuge Message(just cmd)");
    logger1->Warning("Log1 Warning Message(just cmd)");
    logger1->Error("Log1 Error Message(just cmd)");

    // CASE-2 :: 同时输出log信息到终端和'.log'中 ， 使用 LoachLogger(string log_file_path)初始化
    LoachLogger *logger2 = LoachLogger::GetLogger();
    logger2->SetFilePath("/home/albert/CODE/LoachLogger/log/test.log");
    logger2->Debug("Log2 Debuge Message(cmd and log file)");
    logger2->Warning("Log2 Warning Message(cmd and log file)");
    logger2->Error("Log2 Error Message(cmd and log file)");
}

int main(){

    //获取函数运行时间 demo
    DemoGetFuncRunTime();

    // 打印 log 信息到终端与.log文件 demo
    DemoPrintLogMessage();

    printf("ITS OVER FUCKED!\n");
    return 0;
}